#include "CAmeFormat.h"
#include <fstream>
 
using namespace leo;
using namespace std;
 
 //---------------------------------------------------------------------------  
 
 // Constructor  
 
 ameHeader::ameHeader()  
 
 {  
     pbiBlock = NULL;  
     // Limpio las propiedades del mapa  
 
     Clear();  
 
 }  
 
  
 
 //---------------------------------------------------------------------------  
 
 // Destructor  
 
 ameHeader::~ameHeader()  
 
 {  
 
     // Elimino la memoria asignada en los bloques  
 
     if (pbiBlock)  
 
         delete [] pbiBlock;  
 
 }  
 
  
 
 //---------------------------------------------------------------------------  
 
 // Limpiar header  
 
 void ameHeader::Clear()  
 
 {  
 
     // Elimino la memoria asignada en los bloques  
 
     if (pbiBlock)  
 
         delete [] pbiBlock;  
 
  
 
     // Pongo todo en cero  
 
     memset(this, 0, sizeof(ameHeader));  
 
 }  
 
  
 
 //---------------------------------------------------------------------------  
 
 bool ameHeader::ReadFile(char * pszFile)  
 
 {  
 
     fstream fsMapFile;  
 
  
 
     // Abro el archivo para escritura  
 
     fsMapFile.open(pszFile, ios::in | ios::binary);  
 
  
 
     // Chequeo si pude abrir el archivo  
 
     if (!fsMapFile.is_open())  
 
         return false;  
 
  
 
    // Leo el header del archivo  
 
    fsMapFile.read((char*) this, sizeof(*this));  
 
  
 
     // Asigno memoria para los bloques del layer  
 
     pbiBlock = new ameBlockInfo[usTileCountX * usTileCountY];  
 
  
 
     // Leo los bytes de los bloques del layer  
 
     fsMapFile.read((char*) pbiBlock, sizeof(ameBlockInfo) * usTileCountX * usTileCountY);  
 
  
 
     fsMapFile.close();  
 
  
 
     return true;  
 
  
 
 }  
 
  
 
 //---------------------------------------------------------------------------  
 
 bool ameHeader::WriteFile(char * pszFile)  
 
 {  
 
     fstream fsMapFile;  
 
  
 
     // Abro el archivo para escritura  
 
     fsMapFile.open(pszFile, ios::out | ios::binary);  
 
  
 
     // Chequeo si pude abrir el archivo  
 
     if (!fsMapFile.is_open())  
 
         return false;  
 
  
 
    // Escribo el header del archivo  
 
    fsMapFile.write((const char*) this, sizeof(*this));  
 
  
 
     // Escribo los bloques  
 
     fsMapFile.write((const char*) pbiBlock, sizeof(ameBlockInfo) * usTileCountX * usTileCountY);  
 
  
 
     fsMapFile.close();  
 
  
 
     return true;  
 
 }  
 
  
 
 //---------------------------------------------------------------------------  
 
 bool ameHeader::Init(unsigned short usCountX, unsigned short usCountY)  
 
 {  
 
     // Elimino la memoria asignada en los bloques  
 
     if (pbiBlock)  
 
         delete [] pbiBlock;  
 
  
 
     this->usTileCountX = usCountX;  
 
     this->usTileCountY = usCountY;  
 
  
 
     pbiBlock = new ameBlockInfo[this->usTileCountX * this->usTileCountY];  
 
  
 
     memset((void *) pbiBlock, 0, sizeof(ameBlockInfo) * usTileCountX * usTileCountY);  
 
  
 
     for (int i=0; i<usTileCountX * usTileCountY; i++)  
 
     {  
 
         pbiBlock[i].sTileNum = usDefTileBlock;  
 
         pbiBlock[i].sTagCode = -1;  
 
     }  
 
  
 
     return true;  
 
 }  
 
  
 
 // -------------------------------------------------------------------------  
 
 // ameBlockInfo  
 
 void ameBlockInfo::Clear(unsigned short usTileDef)  
 
 {  
 
     // Limpio la estructura de memoria  
 
     memset(this, 0, sizeof(ameBlockInfo));  
 
  
 
     sTileNum = usTileDef;  
 
  
 
     // Por defecto el bloque no se encuentra tageado  
 
     sTagCode = -1;  
 
 }  
 
  
 
 ameBlockInfo::ameBlockInfo()  
 
 {  
 
 }  
 
  
 
 ameBlockInfo::~ameBlockInfo()  
 
 {  
 
 }  
 
  
